
module.exports = options => {
    return async function mwjwt(ctx, next) {
        const token = ctx.request.header['X-Authorization'];
        let decode;
        // 判断路由白名单，如果在，则不进行jwt token check
        if (isInWhiteList(ctx)) {
            await next();
            return;
        }
        // console.log(ctx.app.config);
        if (token) {
            try {
                // 解码token
                decode = ctx.app.jwt.verify(token, options.secret);
                await next();
                console.log("middleware", decode);
            } catch (error) {
                ctx.status = 401;
                ctx.send({
                    message: error.message,
                }, 50008);
                return;
            }
        } else {
            ctx.status = 401;
            // ctx.send("front-end not jwt token in header.", 50008);
            return;
        }
    };
};

// 判断是否在白名单中
function isInWhiteList(ctx) {
    // console.log(ctx.request.path);
    const { route_white_list: list } = ctx.app.config;
    const { path } = ctx.request;
    return list.some(item => path.substr(0, item.length) === item )
}
